home *** CD-ROM | disk | FTP | other *** search
/ Aminet 22 / Aminet 22 (1997)(GTI - Schatztruhe)[!][Dec 1997].iso / Aminet / dev / misc / WHDLoaddev.lha / WHDLoad / patcher1.04.lha / Patcher1.04 / PARAMQTX / paramcarriercommand.asm < prev    next >
Assembly Source File  |  1997-05-02  |  11KB  |  490 lines

  1.  
  2. ;fixed: codeprotection removed
  3. ;    illegal access to a memoryplace $fcxxxx caused a crash
  4. ;      on 68030+ (mmu?), moreover it was useless, possibly
  5. ;      a freezertest
  6. ;    diskroutines contained dbf-delays, now vbi-synced or 
  7. ;      removed
  8.  
  9. ;This is an example of a formatconversion.
  10. ;At first it formats a disk and creates a directory S. (cycle 1)
  11. ;Then it gets the data from the original disk. (cycle2)
  12. ;These data can be read only index-synchronized with OS1.3.
  13. ;Therefore here is a strange decoding routine.
  14. ;Then these data will be modified by changes and saved as file.
  15. ;A proper startup-sequence will be added. (cycle3)
  16.  
  17.     INCDIR    ASM-ONE:INCLUDE2.0/
  18.  
  19.     INCLUDE    OWN/Patcher.I
  20.     INCLUDE    DEVICES/TRACKDISK.I
  21.     INCLUDE    EXEC/EXEC_LIB.I
  22.     INCLUDE    EXEC/IO.I
  23.     INCLUDE    LIBRARIES/DOS_LIB.I
  24.  
  25. HP    MOVEQ.L    #20,D0
  26.     RTS
  27.     DC.L    TAB
  28.     DC.B    'PTCH'
  29.     DC.B    '$VER:CARRIER_COMMAND_1.0',0
  30.     EVEN
  31.  
  32. TAB    DC.L    PCH_INIT,INITROUT
  33.     DC.L    PCH_FILECOUNT,3
  34.     DC.L    PCH_ADAPTOR,ADNAME
  35.     DC.L    PCH_DISKNAME,DISKNAMEARRAY
  36.     DC.L    PCH_FILENAME,FILENAMEARRAY
  37.     DC.L    PCH_CHANGES,CHANGESARRAY    
  38.     DC.L    PCH_NAME,PARAMNAME
  39.     DC.L    PCH_DATALENGTH,LENGTHTABLE
  40.     DC.L    PCH_SAVEDATA,DATATABLE
  41.     DC.L    PCH_SPECIAL,SPECIALARRAY
  42.     DC.L    PCH_STATE,STATEARRAY
  43.     DC.L    PCH_STATE2,STATEARRAY2
  44.     DC.L    0
  45.  
  46. ADNAME    DC.B    'Fixed by Harry.',0
  47.     EVEN
  48.  
  49.  
  50. PARAMNAME    DC.B    'Carrier Command V1.2',0
  51.     EVEN
  52.  
  53.  
  54. DISKNAMEARRAY    DC.L    0        ;no name for formatting a disk
  55.     DC.L    DISK1NAME        ;to save the read data on the 
  56.     DC.L    DISK1NAME        ;newly formatted disk
  57.  
  58. DISK1NAME    DC.B    'CarrierCommand',0
  59.     EVEN
  60.  
  61.  
  62. FILENAMEARRAY    DC.L    0        ;no filename needed to format a disk
  63.     DC.L    FILE2NAME        ;filename of the mainprogram
  64.     DC.L    FILE3NAME        ;adding a startup-sequence
  65. FILE2NAME    DC.B    'CarrierCommand',0
  66.     EVEN
  67. FILE3NAME    DC.B    'S/Startup-Sequence',0
  68.     EVEN
  69.  
  70. LENGTHTABLE    DC.L    $1600        ;just a space of $1600 for personal use
  71.     DC.L    360076            ;save-length (theres a customloadingroutine)
  72.     DC.L    DATA3END-DATA3        ;length of the startup
  73.  
  74. DATATABLE    DC.L    0        ;no unread data to save
  75.     DC.L    0            ;no unread data to save
  76.     DC.L    DATA3            ;startup-sequence to add
  77.  
  78. DATA3    DC.B    'CarrierCommand',$a
  79. DATA3END
  80.     EVEN
  81.  
  82. CHANGESARRAY    DC.L    0        ;no changes to made in cycle 1
  83.     DC.L    CHANGE2            ;changes to the data read from the original
  84.     DC.L    0            ;no changes to made in cycle 3
  85.  
  86. CHANGE2
  87.     DC.B    $00,$80,$00,$00,$4C,$00,$00,$03
  88.     DC.B    $F3,$00,$00,$00,$00,$00,$00,$00
  89.     DC.B    $02,$00,$00,$00,$00,$00,$00,$00
  90.     DC.B    $01,$00,$01,$5F,$89,$40,$00,$00
  91.     DC.B    $01,$00,$00,$03,$E9,$00,$01,$5F
  92.     DC.B    $89,$4E,$F9,$00,$05,$7D,$28,$46
  93.     DC.B    $FC,$27,$00,$2E,$7C,$00,$05,$86
  94.     DC.B    $AA,$4E,$B9,$00,$01,$A0,$EC,$50
  95.     DC.B    $F8,$12,$0F,$50,$F8,$22,$9C,$31
  96.     DC.B    $FC,$00,$04,$22,$9E,$4E,$F8,$5F
  97.     DC.B    $50,$80,$70,$3A,$06,$00,$40,$61
  98.     DC.B    $00,$04,$06,$80,$70,$D6,$06,$76
  99.     DC.B    $01,$61,$00,$03,$6A,$00,$70,$DF
  100.     DC.B    $FA,$80,$71,$6B,$09,$7F,$61,$00
  101.     DC.B    $02,$D6,$08,$2E,$00,$01,$00,$00
  102.     DC.B    $71,$75,$1F,$80,$71,$C4,$08,$00
  103.     DC.B    $10,$61,$00,$02,$7C,$4E,$71,$80
  104.     DC.B    $74,$26,$08,$30,$3C,$00,$B4,$08
  105.     DC.B    $39,$00,$00,$80,$74,$2F,$09,$DF
  106.     DC.B    $F0,$05,$66,$F6,$08,$39,$00,$00
  107.     DC.B    $00,$80,$74,$39,$1B,$DF,$F0,$05
  108.     DC.B    $67,$F6,$51,$C8,$FF,$EA,$4E,$75
  109.     DC.B    $4E,$71,$4E,$71,$08,$39,$00,$00
  110.     DC.B    $00,$DF,$F0,$05,$66,$F6,$08,$39
  111.     DC.B    $00,$80,$74,$55,$09,$00,$00,$DF
  112.     DC.B    $F0,$05,$67,$F6,$4E,$75,$00,$00
  113.     DC.B    $AE,$80,$00,$00,$AE,$A0,$00,$00
  114.     DC.B    $AE,$B0,$00,$00,$AE,$C0,$00,$00
  115.     DC.B    $AE,$E0,$00,$00,$AE,$F0,$00,$00
  116.     DC.B    $AF,$10,$00,$00,$AF,$20,$00,$00
  117.     DC.B    $AF,$40,$00,$00,$AF,$50,$00,$00
  118.     DC.B    $AF,$60,$00,$00,$C7,$C3,$18,$80
  119.     DC.B    $C7,$C8,$04,$12,$C1,$4E,$71,$81
  120.     DC.B    $9D,$52,$0C,$4E,$71,$4E,$71,$4E
  121.     DC.B    $71,$4E,$71,$4E,$71,$4E,$71,$81
  122.     DC.B    $A5,$AC,$08,$4E,$B9,$00,$00,$77
  123.     DC.B    $F8,$4E,$71,$85,$7D,$4C,$02,$2C
  124.     DC.B    $78,$85,$7D,$4F,$03,$04,$43,$FA
  125.     DC.B    $00,$85,$7D,$53,$02,$6A,$70,$85
  126.     DC.B    $7D,$56,$06,$4E,$AE,$FD,$D8,$23
  127.     DC.B    $C0,$85,$7D,$5D,$04,$05,$7D,$AA
  128.     DC.B    $67,$85,$7D,$63,$05,$3E,$61,$6C
  129.     DC.B    $2C,$78,$00,$85,$7D,$69,$08,$04
  130.     DC.B    $4E,$AE,$FF,$6A,$46,$FC,$27,$85
  131.     DC.B    $7D,$72,$03,$4F,$F8,$01,$00,$85
  132.     DC.B    $7D,$76,$FF,$33,$FC,$7F,$FF,$00
  133.     DC.B    $DF,$F0,$9A,$33,$FC,$7F,$FF,$00
  134.     DC.B    $DF,$F0,$96,$41,$F9,$00,$00,$00
  135.     DC.B    $06,$43,$F8,$03,$DE,$20,$3C,$00
  136.     DC.B    $01,$5F,$49,$22,$D8,$53,$80,$66
  137.     DC.B    $FA,$4E,$F8,$03,$DE,$4A,$B9,$00
  138.     DC.B    $05,$7D,$AA,$67,$0C,$2C,$78,$00
  139.     DC.B    $04,$22,$7A,$00,$20,$4E,$AE,$FE
  140.     DC.B    $62,$70,$14,$4E,$75,$00,$00,$00
  141.     DC.B    $00,$67,$72,$61,$70,$68,$69,$63
  142.     DC.B    $73,$2E,$6C,$69,$62,$72,$61,$72
  143.     DC.B    $79,$00,$00,$00,$00,$00,$00,$2C
  144.     DC.B    $7A,$FF,$FA,$23,$EE,$00,$22,$00
  145.     DC.B    $05,$7D,$94,$32,$7C,$00,$00,$4E
  146.     DC.B    $AE,$FF,$22,$4E,$AE,$FE,$F2,$4E
  147.     DC.B    $AE,$FE,$F2,$41,$F9,$00,$00,$00
  148.     DC.B    $00,$23,$C8,$00,$DF,$F0,$80,$30
  149.     DC.B    $39,$00,$DF,$F0,$04,$02,$40,$00
  150.     DC.B    $01,$67,$F4,$30,$39,$00,$DF,$F0
  151.     DC.B    $04,$02,$40,$00,$01,$66,$F4,$30
  152.     DC.B    $39,$00,$DF,$F0,$04,$02,$40,$00
  153.     DC.B    $01,$67,$F4,$30,$39,$00,$DF,$F0
  154.     DC.B    $04,$02,$40,$00,$01,$66,$F4,$30
  155.     DC.B    $39,$00,$DF,$F0,$7C,$0C,$00,$00
  156.     DC.B    $F8,$66,$10,$33,$FC,$00,$00,$00
  157.     DC.B    $DF,$F1,$FC,$33,$FC,$0C,$01,$00
  158.     DC.B    $DF,$F1,$06,$4E,$75,$00,$00,$03
  159.     DC.B    $EC,$00,$00,$00,$05,$00,$00,$00
  160.     DC.B    $00,$00,$00,$00,$02,$00,$05,$7D
  161.     DC.B    $38,$00,$05,$7D,$64,$00,$05,$7D
  162.     DC.B    $7E,$00,$05,$7D,$B6,$00,$00,$00
  163.     DC.B    $01,$00,$00,$00,$01,$00,$05,$7D
  164.     DC.B    $CC,$00,$00,$85,$7E,$75,$17,$00
  165.     DC.B    $00,$00,$00,$00,$03,$F2,$00,$00
  166.     DC.B    $03,$EA,$00,$00,$00,$01,$FF,$FF
  167.     DC.B    $FF,$FE,$00,$00,$03,$F2,$00,$40
  168.     DC.B    $00,$00
  169.  
  170.     EVEN
  171.  
  172.  
  173. ;the parameter-initializing opens source- and destinationdevice, 
  174. ;both are needed
  175. INITROUT    MOVEQ.L    #0,D0
  176.     MOVE.L    PTB_OPENDEVICE(A5),A0
  177.     JSR    (A0)
  178.     TST.L    D0
  179.     BEQ.S    .1
  180.     RTS
  181.  
  182. .1    MOVEQ.L    #1,D0
  183.     MOVE.L    PTB_OPENDEVICE(A5),A0
  184.     JSR    (A0)
  185.     RTS    
  186.  
  187. ;loading-statetexts for the cycles
  188. STATEARRAY    DC.L    FORMATSTATE1    ;i programmed the formatting in the
  189.                     ;loading-routine and i'm to lazy to change that
  190.     DC.L    LOADSTATE2
  191.     DC.L    SAVESTATE
  192.  
  193. FORMATSTATE1
  194.     DC.B    'Please insert an empty dd-disk',$a
  195.     DC.B    'in your destination drive.',0
  196.     EVEN
  197.  
  198. LOADSTATE2
  199.     DC.B    'Please insert your original writepro-',$A
  200.     DC.B    'tected disk in the source drive.',0
  201.     EVEN
  202.  
  203. STATEARRAY2    DC.L    0        ;no text in cycle 1
  204.     DC.L    SAVESTATE
  205.     DC.L    SAVESTATE
  206.  
  207.  
  208. SAVESTATE    
  209.     DC.B    'Please insert your destination disk.',0
  210.     EVEN
  211.  
  212. ;routines to 'load' something
  213. SPECIALARRAY    DC.L    FORMAT        ;more correctly this would be put to
  214.                     ;PCH_SAVEPGM, but i'm to lazy
  215.     DC.L    LOADROUT        ;load stuff from original
  216.     DC.L    0            ;nothing special in cycle 3
  217.  
  218.  
  219. FORMAT
  220.     MOVEQ.L    #0,D0            ;format dd-disk in destination-drive
  221.     LEA.L    DISK1NAME(PC),A0
  222.     MOVE.L    PTB_FORMATDEST(A5),A1
  223.     JSR    (A1)
  224.     TST.L    D0
  225.     BEQ.S    .1
  226. .ERR    MOVEQ.L    #-1,D0
  227.     RTS
  228.  
  229. .1    MOVE.L    #DIRNAME,D1        ;and create a 's'-drawer
  230.     MOVE.L    PTB_DOSBASE(A5),A6
  231.     JSR    _LVOCREATEDIR(A6)
  232.     TST.L    D0
  233.     BEQ.S    .ERR
  234.     MOVE.L    D0,D1
  235.     JSR    _LVOUNLOCK(A6)
  236.     MOVEQ.L    #0,D0
  237.     RTS
  238.  
  239.  
  240. DIRNAME    DC.B    'CarrierCommand:S',0
  241.     EVEN
  242.  
  243. LOADROUT
  244.     MOVEQ.L    #0,D7                ;one diskchange allowed
  245. .NEU
  246. .4    MOVE.L    PTB_DEVICESOURCEPTR(A5),A1    ;disk in sourcedrive?
  247.     MOVE.W    #TD_CHANGESTATE,IO_COMMAND(A1)
  248.     MOVE.L    (_SYSBASE).W,A6
  249.     JSR    _LVODOIO(A6)
  250.     TST.L    IO_ACTUAL(A1)
  251.     BNE.W    .NOTCC
  252.  
  253.     MOVE.L    PTB_ADDRESSOFFILE(A5),A4    ;load first part of disk
  254.     LEA.L    $4C(A4),A2            ;offset to load in the dataspace
  255.     MOVE.L    #$9,D2                ;starttrack on the disk
  256.     MOVE.L    #$50000,D3            ;$50000 bytes to read
  257.     MOVEQ.L    #0,D4                ;data from the start of the track
  258. ;    bra.s    .5                ;because reading starts with
  259.                         ;trackstart, this is obsolete
  260.  
  261. .3    TST.L    D4
  262.     BNE.S    .1
  263. .5    MOVEQ.L    #$4,D6                ;4 tries, then error
  264. .55    MOVE.L    PTB_DEVICESOURCEPTR(A5),A1
  265.     MOVE.L    PTB_SPACE(A5),IO_DATA(A1)    ;track is to load in PTB_SPACE
  266.     MOVE.L    #$7FFE,IO_LENGTH(A1)        ;double length of track
  267.                         ;to decode the index-sync-read data
  268.     MOVE.L    D2,D0                ;my own trackcounter
  269.     ADD.L    D0,D0                ;original is one-sided
  270.     MOVE.L    D0,IO_OFFSET(A1)
  271.     MOVE.W    #TD_RAWREAD,IO_COMMAND(A1)
  272.     MOVE.B    #IOTDB_INDEXSYNC,IO_FLAGS(A1)
  273.     MOVE.L    (_SYSBASE).W,A6
  274.     JSR    _LVODOIO(A6)
  275.     TST.L    D0
  276.     BNE.W    .ERR
  277.     MOVE.L    PTB_SPACE(A5),A0
  278.     LEA.L    $7FFE(A0),A1            ;end of buffer
  279.     LEA.L    $7FFE(A0),A3
  280.     BSR.W    TRACKDECODE
  281.     TST.L    D0
  282.     BEQ.S    .R1OK
  283.     DBF    D6,.55
  284.     BRA.W    .NOTCC
  285.  
  286. .R1OK    ADDQ.L    #1,D2
  287.     ST    D7                ;correct disk - nothing anymore
  288.                         ;to change
  289. .1    MOVE.B    (A3)+,(A2)+
  290.     ADDQ.L    #1,D4
  291.     CMP.L    #$1400,D4            ;tracklength
  292.     BNE.S    .2
  293.     MOVEQ.L    #0,D4                ;new track
  294. .2    SUBQ.L    #1,D3
  295.     BNE.S    .3
  296.  
  297.     LEA.L    (A4),A2
  298.     ADDA.L    #$4FFB4+$22,A2            ;second part to read from the
  299.     MOVE.L    #$2,D2                ;original
  300.     MOVE.L    #32160,D3
  301.     MOVEQ.L    #0,D4
  302. .13    TST.L    D4
  303.     BNE.S    .11
  304.     MOVEQ.L    #$4,D6
  305. .REP    MOVE.L    PTB_DEVICESOURCEPTR(A5),A1
  306.     MOVE.L    PTB_SPACE(A5),IO_DATA(A1)
  307.     MOVE.L    #$7FFE,IO_LENGTH(A1)
  308.     MOVE.L    D2,D0
  309.     ADD.L    D0,D0
  310.     MOVE.L    D0,IO_OFFSET(A1)
  311.     MOVE.W    #TD_RAWREAD,IO_COMMAND(A1)
  312.     MOVE.B    #IOTDB_INDEXSYNC,IO_FLAGS(A1)
  313.     MOVE.L    (_SYSBASE).W,A6
  314.     JSR    _LVODOIO(A6)
  315.     TST.L    D0
  316.     BNE.S    .ERR
  317.     MOVE.L    PTB_SPACE(A5),A0
  318.     LEA.L    $7FFE(A0),A1
  319.     LEA.L    $7FFE(A0),A3
  320.     BSR.W    TRACKDECODE
  321.     TST.L    D0
  322.     BEQ.S    .R2OK
  323.     DBF    D6,.REP
  324.     BRA.S    .ERR
  325.  
  326. .R2OK    ADDQ.L    #1,D2
  327.  
  328. .11    MOVE.B    (A3)+,(A2)+
  329.     ADDQ.L    #1,D4
  330.     CMP.L    #$1400,D4
  331.     BNE.S    .12
  332.     MOVEQ.L    #0,D4
  333. .12    SUBQ.L    #1,D3
  334.     BNE.S    .13
  335.  
  336.     MOVEQ.L    #0,D4
  337. .END    MOVE.L    PTB_DEVICESOURCEPTR(A5),A1    ;switch motor off
  338.     MOVE.L    #0,IO_LENGTH(A1)
  339.     MOVE.W    #TD_MOTOR,IO_COMMAND(A1)
  340.     MOVE.L    (_SYSBASE).W,A6
  341.     JSR    _LVODOIO(A6)
  342.  
  343.     MOVE.L    D4,D0
  344.     RTS
  345.  
  346. .ERR    MOVEQ.L    #-1,D4
  347.     BRA.S    .END
  348.  
  349. .NOTCC    TST.L    D7            ;if the first time the original
  350.     BNE.S    .ERR            ;was not in the source drive,
  351.     ST    D7            ;youll be asked to put it there
  352.     LEA.L    LINE1(PC),A0
  353.     LEA.L    LINE2(PC),A1
  354.     MOVE.L    PTB_REQUEST(A5),A6
  355.     JSR    (A6)
  356.     TST.L    D0
  357.     BNE.S    .ERR
  358.     BRA.W    .NEU
  359.  
  360. LINE1    DC.B    'Please insert your original',0
  361.     EVEN
  362. LINE2    DC.B    'in the source drive.',0
  363.     EVEN
  364.  
  365. ;< A0 RAWTRACK
  366. ;< A1 TRACKBUFFER
  367. ;> D0 ERROR
  368.  
  369. TRACKDECODE    MOVEM.L    A2/A3/D2/D3/D4/D5/D6,-(A7)
  370.     MOVE.L    A0,A2
  371.     MOVE.L    A1,A3
  372.     MOVE.W    #$4489,-2(A3)        ;sync has to be searched with shifting
  373.     MOVE.L    #$55555555,D3        ;the data
  374. .SHF2    MOVEQ.L    #$10-1,D5
  375. .SHF1    MOVE.L    (A2),D0
  376.     LSR.L    D5,D0
  377.     CMP.W    #$4489,D0
  378.     BEQ.S    .SY
  379.     DBF    D5,.SHF1
  380.     ADDQ.L    #2,A2
  381.     BRA.S    .SHF2
  382.  
  383. .SY    MOVE.L    (A2),D0
  384.     ADDQ.L    #2,A2
  385.     LSR.L    D5,D0            ;d5 is the shifting-number when sync was found
  386.     CMP.W    #$4489,D0
  387.     BNE.S    .SY
  388.  
  389. .1    MOVE.L    (A2),D0
  390.     ADDQ.L    #2,A2
  391.     LSR.L    D5,D0
  392.     CMP.W    #$4489,D0
  393.     BEQ.S    .1
  394.  
  395.     CMP.L    A2,A3
  396.     BLS    .ERR
  397.     SUBQ.W    #2,A2
  398.     LEA.L    8(A2),A0
  399.     BSR.S    .DC1L
  400.     MOVE.L    D0,D4
  401.     LEA.L    $10(A2),A0
  402.     MOVE.W    #$2800,D1
  403.     BSR.S    .CHKSUM
  404.     CMP.L    D0,D4
  405.     BNE.S    .ERR
  406.     LEA.L    $10(A2),A0
  407.     MOVE.W    #$1400,D0
  408.     BSR.W    .DC
  409.     MOVEM.L    (A7)+,A2/A3/D2/D3/D4/D5/D6
  410.     MOVEQ    #0,D0
  411.     RTS    
  412.  
  413. .ERR    MOVEM.L    (A7)+,A2/A3/D2/D3/D4/D5/D6
  414.     MOVEQ    #-1,D0
  415.     RTS    
  416.  
  417. .CHKSUM    LSR.W    #2,D1
  418.     MOVE.L    (A0)+,D6
  419.     LSR.L    D5,D6
  420.     SWAP    D6
  421.     CLR.W    D6
  422.     MOVE.L    -2(A0),D0
  423.     LSR.L    D5,D0
  424.     AND.L    #$FFFF,D0
  425.     OR.L    D6,D0
  426.     SUBQ.W    #2,D1
  427. .CHK1    MOVE.L    (A0)+,D6
  428.     LSR.L    D5,D6
  429.     SWAP    D6
  430.     CLR.W    D6
  431.     MOVE.L    -2(A0),D2
  432.     LSR.L    D5,D2
  433.     AND.L    #$FFFF,D2
  434.     OR.L    D6,D2
  435.     EOR.L    D2,D0
  436.     DBF    D1,.CHK1
  437.     AND.L    D3,D0
  438.     RTS    
  439.  
  440. .DC1L    MOVE.L    (A0)+,D6
  441.     LSR.L    D5,D6
  442.     SWAP    D6
  443.     CLR.W    D6
  444.     MOVE.L    -2(A0),D0
  445.     LSR.L    D5,D0
  446.     AND.L    #$FFFF,D0
  447.     OR.L    D6,D0
  448.     MOVE.L    (A0)+,D6
  449.     LSR.L    D5,D6
  450.     SWAP    D6
  451.     CLR.W    D6
  452.     MOVE.L    -2(A0),D1
  453.     LSR.L    D5,D1
  454.     AND.L    #$FFFF,D1
  455.     OR.L    D6,D1
  456.     
  457.     AND.L    D3,D0
  458.     AND.L    D3,D1
  459.     ADD.L    D0,D0
  460.     OR.L    D1,D0
  461.     RTS    
  462.  
  463. .DC    LEA.L    (A0,D0.W),A1
  464.     LSR.W    #2,D0
  465.     SUBQ.W    #1,D0
  466. .DC1    MOVE.L    (A0)+,D6
  467.     LSR.L    D5,D6
  468.     SWAP    D6
  469.     CLR.W    D6
  470.     MOVE.L    -2(A0),D1
  471.     LSR.L    D5,D1
  472.     AND.L    #$FFFF,D1
  473.     OR.L    D6,D1
  474.     MOVE.L    (A1)+,D6
  475.     LSR.L    D5,D6
  476.     SWAP    D6
  477.     CLR.W    D6
  478.     MOVE.L    -2(A1),D2
  479.     LSR.L    D5,D2
  480.     AND.L    #$FFFF,D2
  481.     OR.L    D6,D2
  482.     AND.L    D3,D1
  483.     AND.L    D3,D2
  484.     ADD.L    D1,D1
  485.     OR.L    D2,D1
  486.     MOVE.L    D1,(A3)+
  487.     DBF    D0,.DC1
  488.     RTS    
  489.  
  490.